package com.hspedu.codeblock;

/**创建一个对象时，在一个类，调用的顺序是：
 * 1.调用静态代码块和静态属性初始化（静态代码块和静态属性初始化调用的优先级一样，
 * 如果有多个静态代码块和多个静态属性初始化，则按他们的定义的顺序调用）
 * 2.调用普通代码块和普通属性初始化（普通代码块和静态属性初始化调用的优先级一样，
 * 如果有多个普通代码块和多个普通属性初始化，则按他们的定义的顺序调用）
 * 3.调用构造器
 */
public class CodeDetail02 {
    public static void main(String[] args) {
        A a = new A();
    }
}

class A{
    private static int n1 = getN1();//静态属性
    private int n2 = getN2();//普通属性
    //普通代码块
    {
        System.out.println("A的普通代码块");
    }
    //静态代码块
    static {
        System.out.println("A的静态代码块");
    }

    public static int getN1(){
        System.out.println("getN1被调用");
        return 100;
    }
    public int getN2(){
        System.out.println("getN2被调用");
        return 200;
    }
    public A(){
        System.out.println("A的构造器");
    }
}

